सी मध्ये शून्य पॉईंटर
शून्य पॉईंटरचा वाक्यरचना
qaalai *paEZMTr naava;
शून्य पॉईंटरची घोषणा खाली दिली आहे:
qaalai *paiTiAar;
वरील घोषणेमध्ये, शून्य पॉईंटरचा प्रकार आहे आणि 'पीटीआर' हे पॉईंटरचे नाव आहे.
आपण काही उदाहरणे विचारात घेऊया: इंट i = 9; // पूर्णांक व्हेरिएबल इनिशिएलायझेशन. इंट *पी; // पूर्णांक पॉईंटर घोषणा. फ्लोट *एफपी; // फ्लोटिंग पॉईंटर घोषणा. शून्य *पीटीआर; // शून्य पॉईंटर घोषणा. पी = एफपी; // चुकीचे. एफपी = & मी; // चुकीचे पीटीआर = पी; // बरोबर पीटीआर = एफपी; // बरोबर पीटीआर = & मी; // बरोबर
सी मध्ये शून्य पॉईंटरचा आकार
सी मधील शून्य पॉईंटरचा आकार वर्ण प्रकाराच्या पॉईंटरच्या आकाराप्रमाणेच आहे. सी समजानुसार, शून्य करण्यासाठी पॉईंटरचे प्रतिनिधित्व वर्ण प्रकाराच्या पॉईंटरसारखेच आहे. आपण वापरत असलेल्या प्लॅटफॉर्मवर अवलंबून पॉईंटरचे आकार बदलू शकतात.
चला खालील उदाहरण पाहू:
#vaapara <PsaTidiAayaAae.Pca>
paunaZ mauqya()
{
qaalai *paiTiAar = Saunya; //qaalai paEZMTr
paunaZ *pai = Saunya;// paunaZaMk paEZMTr
Axar *saipai = Saunya;//vanaZ paEZMTr
ApaunaZ *Ppafpai = Saunya;//ApaunaZ paEZMTr
//Aakar cyaa qaalai paEZMTr
laiha("Aakar cyaa Saunya paEZMTr = %paunaZ\n\n",Aakar(paiTiAar));
//Aakar cyaa paunaZaMk paEZMTr
laiha("Aakar cyaa paunaZaMk paEZMTr = %paunaZ\n\n",Aakar(pai));
//Aakar cyaa vanaZ paEZMTr
laiha("Aakar cyaa vanaZ paEZMTr = %paunaZ\n\n",Aakar(saipai));
//Aakar cyaa ApaunaZ paEZMTr
laiha("Aakar cyaa laaeT paEZMTr = %paunaZ\n\n",Aakar(Ppafpai));
vaapasakra 0;
}
शून्य पॉईंटरचे फायदे
खालील शून्य पॉईंटरचे फायदे खालीलप्रमाणे आहेत: मॅलोक () आणि कॉलॉक () फंक्शन शून्य पॉईंटर परत करते, जेणेकरून ही कार्ये कोणत्याही डेटा प्रकाराच्या मेमरीचे वाटप करण्यासाठी वापरली जाऊ शकतात.
#vaapara <PsaTidiAayaAae.Pca>
#vaapara<smautai_AavaMTna_1.Pca>
paunaZ mauqya()
{
paunaZ A=90;
paunaZ *PKsa = (paunaZ*)smautai_AavaMTna_1(Aakar(paunaZ)) ;
PKsa=&A;
laiha("maulya kaya Aahe naiDeZSaita vDara x paEZMTr : %paunaZ",*PKsa);
vaapasakra 0;
}
शून्य पॉईंटरशी संबंधित काही महत्त्वाचे मुद्देः
#vaapara <PsaTidiAayaAae.Pca>
paunaZ mauqya()
{
paunaZ A=90;
qaalai *paiTiAar;
paiTiAar=&A;
laiha("maulya kaya Aahe naiDeZSaita vDara paiTiAar paEZMTr : %paunaZ",*paiTiAar);
vaapasakra 0;
}
वरील कोडमध्ये, *पीटीआर एक शून्य पॉईंटर आहे जो पूर्णांक व्हेरिएबल 'ए' कडे निर्देशित करीत आहे. आम्हाला आधीपासूनच माहित आहे की शून्य पॉईंटरला निषेध केला जाऊ शकत नाही, म्हणून वरील कोड कंपाईल-टाइम त्रुटी देईल कारण आम्ही थेट 'पीटीआर' पॉईंटरद्वारे निर्देशित केलेल्या व्हेरिएबलचे मूल्य मुद्रित करीत आहोत.
आता, आम्ही त्रुटी काढण्यासाठी वरील कोड पुन्हा लिहितो.
#vaapara <PsaTidiAayaAae.Pca>
paunaZ mauqya()
{
paunaZ A=90;
qaalai *paiTiAar;
paiTiAar=&A;
laiha("maulya kaya Aahe paEMT vDara paiTiAar paEZMTr : %paunaZ",*(paunaZ*)paiTiAar);
vaapasakra 0;
}
वरील कोडमध्ये, आम्ही खाली दिलेल्या विधानाचा वापर करून पूर्णांक पॉईंटरला शून्य पॉईंटर टाइप करा: (इंट*) पीटीआर; मग, आम्ही खाली दिलेल्या विधानाचा वापर करून शून्य पॉईंटर 'पीटीआर' द्वारे निर्देशित केलेल्या व्हेरिएबलचे मूल्य मुद्रित करतो: *(इंट*) पीटीआर;
शून्य पॉईंटर्सवर अंकगणित ऑपरेशन
आम्ही थेट सी मध्ये शून्य पॉईंटर्सवर अंकगणित ऑपरेशन्स लागू करू शकत नाही. आम्हाला योग्य टाइपकास्टिंग लागू करण्याची आवश्यकता आहे जेणेकरून आम्ही शून्य पॉईंटर्सवर अंकगणित ऑपरेशन्स करू शकू.
चला खालील उदाहरण पाहू:
#vaapara<PsaTidiAayaAae.Pca>
paunaZ mauqya()
{
ApaunaZ A[4]={6.1,2.3,7.8,9.0};
qaalai *paiTiAar;
paiTiAar=A;
jaeMvh(paunaZ mai=0;mai<4;mai++)
{
laiha("%ApaunaZ,",*paiTiAar);
paiTiAar=paiTiAar+1; // caukicae.
}}
वरील कोड कंपाईल-टाइम त्रुटी दर्शवितो की "शून्य अभिव्यक्तीचा अवैध वापर" म्हणून आम्ही रिक्त पॉईंटरवर अंकगणित ऑपरेशन्स थेट लागू करू शकत नाही, म्हणजेच, पीटीआर = पीटीआर+1.
त्रुटी काढण्यासाठी वरील कोड पुन्हा लिहा.
#vaapara<PsaTidiAayaAae.Pca>
paunaZ mauqya()
{
ApaunaZ A[4]={6.1,2.3,7.8,9.0};
qaalai *paiTiAar;
paiTiAar=A;
jaeMvh(paunaZ mai=0;mai<4;mai++)
{
laiha("%ApaunaZ,",*((ApaunaZ*)paiTiAar+mai));
}}
आम्ही शून्य पॉईंटरवर योग्य कास्टिंग लागू केल्यामुळे वरील कोड यशस्वीरित्या चालतो, म्हणजेच, (फ्लोट*) पीटीआर आणि नंतर आम्ही अंकगणित ऑपरेशन, म्हणजेच,*((फ्लोट*) पीटीआर+आय) लागू करतो.
आम्ही शून्य पॉईंटर्स का वापरतो?
आम्ही पुन्हा वापरण्यामुळे आम्ही शून्य पॉईंटर्स वापरतो. शून्य पॉईंटर्स कोणत्याही प्रकारच्या ऑब्जेक्ट संचयित करू शकतात आणि आम्ही योग्य टाइपकॅस्टिंगसह इंडिरेक्शन ऑपरेटरचा वापर करून कोणत्याही प्रकारच्या ऑब्जेक्ट पुनर्प्राप्त करू शकतो.
चला उदाहरणाद्वारे समजूया.
#vaapara<PsaTidiAayaAae.Pca>
paunaZ mauqya()
{
paunaZ A=56; // AarMBa cyaa A paunaZaMk cala 'A'.
ApaunaZ bai=4.5; // AarMBa cyaa A ApaunaZ cala 'bai'.
Axar sai='ke'; // AarMBa cyaa A Axar cala 'sai'.
qaalai *paiTiAar; // oaaeSanaa cyaa qaalai paEZMTr.
// naiyauKta D paaa cyaa cala 'A'.
paiTiAar=&A;
laiha("maulya cyaa 'a' Aahe : %paunaZ",*((paunaZ*)paiTiAar));
// naiyauKta D paaa cyaa cala 'bai'.
paiTiAar=&bai;
laiha("\DAMsanama cyaa 'b' Aahe : %ApaunaZ",*((ApaunaZ*)paiTiAar));
// naiyauKta D paaa cyaa cala 'sai'.
paiTiAar=&sai;
laiha("\DAMsanama cyaa 'c' Aahe : %Axar",*((Axar*)paiTiAar));
vaapasakra 0;
}